# -*- coding: utf-8 -*-

'''
file 对象使用 open 函数来创建，下表列出了 file 对象常用的函数：

序号	方法及描述
1
file.close() 关闭文件。关闭后文件不能再进行读写操作。

2
file.flush() 刷新文件内部缓冲，直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。

3
file.fileno() 返回一个整型的文件描述符(file descriptor FD 整型), 可以用在如os模块的read方法等一些底层操作上。

4
file.isatty() 如果文件连接到一个终端设备返回 True，否则返回 False。

5
file.next() 返回文件下一行。

6
file.read([size]) 从文件读取指定的字节数，如果未给定或为负则读取所有。

7
file.readline([size]) 读取整行，包括 "\n" 字符。

8
file.readlines([sizeint]) 读取所有行并返回列表，若给定sizeint>0，返回总和大约为sizeint字节的行, 实际读取值可能比 sizeint 较大, 因为需要填充缓冲区。

9
file.seek(offset[, whence]) 设置文件当前位置

10
file.tell() 返回文件当前位置。

11
file.truncate([size]) 从文件的首行首字符开始截断，截断文件为 size 个字符，无 size 表示从当前位置截断；截断之后 V 后面的所有字符被删除，其中 Widnows 系统下的换行代表2个字符大小。

12
file.write(str) 将字符串写入文件，没有返回值。

13
file.writelines(sequence) 向文件写入一个序列字符串列表，如果需要换行则要自己加入每行的换行符。
'''

'''
习题1.

将 iris_data.csv 读取例子中不完美的两个部分完善
a. 存储数字数据的类型由字符串改成 float 或 int；
b. 使 data 中不包含最后一行空行。
'''
filename = "iris_data.csv"
def ex1():
    with open(filename, "r") as fd:
        for line in fd:
            line = line.strip()
            if not line:
                continue
            line = line.split(",")
            new_line = []
            for d in line:
                try:
                    d = float(d)
                except:
                    pass
                new_line.append(d)
            print(new_line)
print( "\r\n习题 1" );
ex1()

'''
习题2:

读取文件 iris_data.csv 中的数据并变形为一个字典，
字典的 key 是花朵的英文名, value 是对应的4个浮点数数值。如

{
"Iris-setosa": [4.9,3.1,1.5,0.1],
"...": [...],
...
}
'''
def ex2():
    with open(filename, "r") as fd:
        dct = {}
        for line in fd:
            line = line.strip()
            if not line:
                continue
            line = line.split(",")
            dct[line[-1]] = [ float(d) for d in line[:-1] ]
        print(dct)
        return dct

print( "\r\n习题 2" );
ex2()

'''
习题3

假设习题2中的四个数字对应的名字为: a, b, c, d
构造一个嵌套的字典存储花朵的信息, 并存为 json 文件.

{
"Iris-setosa": {
                         "a": 4.9,
                         "b": 3.1,
                         "c": 1.5,
                         "d": 0.1
                      },
...
}
'''
def ex3():
    pdata = ex2()
    data = {}
    for key in pdata:
        data[key] = {k:v for k,v in zip("abcd", pdata[key])}
        print(data)
    import json
    filename = "info.json"
    with open(filename, 'w') as fd:
        json.dump(data, fd, indent=4)

print( "\r\n习题 3" );
ex3()